SignalR এবং রিয়েল-টাইম অ্যাপ্লিকেশন

Microsoft Technologies - ডট নেট কোর (Dot.Net Core)
184
184

SignalR একটি শক্তিশালী লাইব্রেরি যা ASP.NET Core-এ রিয়েল-টাইম ওয়েব ফিচার তৈরি করতে সাহায্য করে। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে মেসেজ আদান-প্রদানের জন্য একটি সিম্পল এবং ইফেক্টিভ ওয়েবসকেট প্রযুক্তি, যা আপনার অ্যাপ্লিকেশনকে রিয়েল-টাইম ইন্টারঅ্যাকশন সক্ষম করতে পারে। SignalR ডেভেলপারদের জন্য একটি সহজ পথ প্রদান করে যাতে তারা একাধিক ক্লায়েন্টকে একসাথে একযোগে তথ্য পাঠাতে পারে এবং অ্যাপ্লিকেশনটির কার্যকারিতা বৃদ্ধি করতে পারে।


SignalR কী?

SignalR হলো একটি লাইব্রেরি যা ডটনেট অ্যাপ্লিকেশনের জন্য রিয়েল-টাইম কমিউনিকেশন সহজ করে তোলে। এটি বিশেষভাবে সেই সময় ব্যবহৃত হয় যখন একাধিক ক্লায়েন্টকে একযোগে ডেটা পাঠানোর প্রয়োজন হয়, যেমন চ্যাট অ্যাপ্লিকেশন, লাইভ স্পোর্টস স্কোর, শেয়ার্ড ডকুমেন্টস, গেমস, স্টক মার্কেট আপডেট ইত্যাদি।

SignalR বিভিন্ন ধরনের ট্রান্সপোর্ট প্রযুক্তি ব্যবহার করে, যেমন WebSockets, Server-Sent Events (SSE), এবং Long Polling, এবং এটি স্বয়ংক্রিয়ভাবে সবচেয়ে উপযুক্ত ট্রান্সপোর্ট পদ্ধতি বেছে নেয়, ক্লায়েন্টের সাপোর্টের ভিত্তিতে।


SignalR-এর মূল বৈশিষ্ট্য

  • পুশ-ভিত্তিক আপডেট: SignalR আপনাকে সার্ভার থেকে ক্লায়েন্টে ডেটা পুশ করার সুবিধা দেয়, যার ফলে ক্লায়েন্ট নতুন ডেটা পেতে ওয়েব পেজ রিফ্রেশ করতে হয় না।
  • দ্রুত এবং নির্ভরযোগ্য: SignalR খুবই দ্রুত এবং নির্ভরযোগ্য, বিশেষত যখন বড় পরিমাণ ডেটা একযোগে অনেক ক্লায়েন্টকে পাঠাতে হয়।
  • হাই লোডের জন্য উপযুক্ত: SignalR বিশেষভাবে উপযুক্ত অ্যাপ্লিকেশনের জন্য যেখানে একাধিক ক্লায়েন্ট রিয়েল-টাইম ডেটার প্রতি রেসপন্স করতে থাকে।
  • স্কেলেবল: SignalR বেশ স্কেলেবল এবং ক্লাউড ডিপ্লয়মেন্টে ব্যবহার করা যায়, যেমন Azure SignalR Service, যেখানে অনেক বড় পরিসরের রিয়েল-টাইম অ্যাপ্লিকেশন চালানো যায়।

SignalR দিয়ে রিয়েল-টাইম চ্যাট অ্যাপ্লিকেশন তৈরি

SignalR-এর মাধ্যমে একটি সহজ চ্যাট অ্যাপ্লিকেশন তৈরি করা যায়। এখানে ক্লায়েন্ট এবং সার্ভারের মধ্যে মেসেজ আদান-প্রদানের জন্য SignalR হাব ব্যবহার করা হয়।

SignalR হাব তৈরি করা

ASP.NET Core-এ SignalR হাব তৈরির জন্য, প্রথমে একটি ক্লাস তৈরি করতে হয় যা Hub ক্লাস থেকে ইনহেরিট করবে।

public class ChatHub : Hub
{
    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

এখানে, SendMessage মেথড ক্লায়েন্টের কাছ থেকে বার্তা গ্রহণ করে এবং তা সমস্ত সংযুক্ত ক্লায়েন্টদের কাছে পাঠিয়ে দেয়।

SignalR হাব কনফিগার করা

এখন, SignalR হাবকে Startup.cs ফাইলে কনফিগার করতে হবে।

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHub<ChatHub>("/chathub");
    });
}

এখানে, MapHub মেথড SignalR হাবকে একটি নির্দিষ্ট URL (যেমন /chathub) তে ম্যাপ করে।

চ্যাট ক্লায়েন্ট তৈরি করা

চ্যাট ক্লায়েন্ট সাইডে JavaScript ব্যবহার করে SignalR হাবের সাথে যোগাযোগ করতে হয়। এখানে একটি উদাহরণ দেখানো হলো, যেখানে chatHub নামে একটি SignalR হাবের সাথে ক্লায়েন্ট যুক্ত হয় এবং মেসেজ গ্রহণ করে।

<script src="https://cdnjs.cloudflare.com/ajax/libs/signalr/5.0.11/signalr.min.js"></script>
<script>
    const connection = new signalR.HubConnectionBuilder()
        .withUrl("/chathub")
        .build();

    connection.on("ReceiveMessage", (user, message) => {
        const msg = user + ": " + message;
        document.getElementById("messagesList").innerHTML += "<li>" + msg + "</li>";
    });

    document.getElementById("sendMessageButton").addEventListener("click", () => {
        const user = document.getElementById("userInput").value;
        const message = document.getElementById("messageInput").value;
        connection.invoke("SendMessage", user, message)
            .catch(err => console.error(err.toString()));
    });

    connection.start().catch(err => console.error(err.toString()));
</script>

এখানে, ReceiveMessage ইভেন্টটি ক্লায়েন্টে মেসেজ গ্রহণ করতে এবং SendMessage মেথডটি সার্ভারে মেসেজ পাঠানোর জন্য ব্যবহৃত হচ্ছে।


WebSockets এবং SignalR

SignalR মূলত WebSockets বা অন্যান্য প্রযুক্তি যেমন Server-Sent Events (SSE) অথবা Long Polling ব্যবহার করে রিয়েল-টাইম ডেটা ট্রান্সফার করে। SignalR স্বয়ংক্রিয়ভাবে ক্লায়েন্টের জন্য সবচেয়ে উপযুক্ত প্রযুক্তি বেছে নেয়, যা সার্ভার এবং ক্লায়েন্টের মধ্যে সর্বোচ্চ পারফরম্যান্স প্রদান করতে পারে। WebSockets সাধারণত সবচেয়ে ভালো পারফরম্যান্স দেয়, কিন্তু যদি WebSockets সাপোর্ট না থাকে তবে SignalR অন্যান্য পদ্ধতি ব্যবহার করতে পারে।


SignalR এবং নিরাপত্তা

SignalR অ্যাপ্লিকেশনগুলিতে নিরাপত্তা গুরুত্বপূর্ণ। একে সুরক্ষিত করতে, যেমন ক্লায়েন্ট এবং সার্ভারের মধ্যে প্রাইভেট মেসেজ পাঠানোর জন্য, SignalR অটোমেটিকভাবে নিরাপদ সংযোগ (HTTPS) ব্যবহার করতে পারে। এছাড়া, SignalR-এ যেকোনো প্রকারের অনুমোদন এবং প্রমাণীকরণের জন্য ASP.NET Core Identity ব্যবহৃত হতে পারে।


SignalR একটি অত্যন্ত শক্তিশালী এবং সহজে ব্যবহারযোগ্য লাইব্রেরি, যা রিয়েল-টাইম অ্যাপ্লিকেশন তৈরি করার জন্য ডিজাইন করা হয়েছে। এটি ওয়েবচ্যাট, লাইভ স্টক আপডেট, গেমিং, রিয়েল-টাইম সাপোর্ট, এবং অন্যান্য অনেক অ্যাপ্লিকেশনে ব্যবহার করা যায়। SignalR এর মাধ্যমে আপনি খুব সহজে ক্লায়েন্ট এবং সার্ভারের মধ্যে সঠিকভাবে ডেটা ট্রান্সফার করতে পারবেন, যা আপনার অ্যাপ্লিকেশনকে আরো ইন্টারঅ্যাকটিভ এবং রিয়েল-টাইম করবে।

common.content_added_by

SignalR কী?

256
256

SignalR হলো একটি ASP.NET Core লাইব্রেরি যা রিয়েল-টাইম, দু-মুখী (bidirectional) যোগাযোগের জন্য ব্যবহৃত হয়। এটি সার্ভার এবং ক্লায়েন্টের মধ্যে দ্রুত ও অবিচ্ছিন্ন ডেটা সঞ্চালন নিশ্চিত করে, যা বিশেষ করে চ্যাট অ্যাপ্লিকেশন, লাইভ নিউজ ফিড, ফাইনান্সিয়াল ট্র্যাকিং, এবং অন্যান্য রিয়েল-টাইম পরিষেবায় উপকারী।

SignalR মূলত HTTP প্রোটোকল থেকে আলাদা একটি যোগাযোগ স্তর প্রদান করে যা WebSockets, Server-Sent Events (SSE), এবং Long Polling প্রযুক্তি ব্যবহার করে। SignalR ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদানকে আরও কার্যকর এবং দ্রুত করে তোলে।


SignalR এর মূল বৈশিষ্ট্য

  1. দ্বিমুখী যোগাযোগ (Bidirectional Communication): SignalR ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা পাঠাতে ও গ্রহণ করতে সক্ষম। সার্ভার ক্লায়েন্টকে যেকোনো সময়ে বার্তা পাঠাতে পারে এবং ক্লায়েন্টও সার্ভারে বার্তা পাঠাতে পারে।
  2. অটো-রিকনেকশন (Automatic Reconnection): যখন কোন ক্লায়েন্টের সংযোগ হারিয়ে যায়, SignalR স্বয়ংক্রিয়ভাবে সংযোগ পুনঃস্থাপন করে। এটি রিয়েল-টাইম অ্যাপ্লিকেশনগুলোর জন্য বিশেষভাবে গুরুত্বপূর্ণ।
  3. স্কেলেবিলিটি (Scalability): SignalR হাবগুলি ক্লাস্টারড সার্ভারে কাজ করতে সক্ষম, যার ফলে এটি বৃহৎ পরিসরে অ্যাপ্লিকেশন স্কেল করতে সক্ষম।
  4. কম্প্যাটিবিলিটি (Compatibility): SignalR বিভিন্ন ক্লায়েন্ট প্ল্যাটফর্মে কাজ করতে সক্ষম, যেমন ওয়েব ব্রাউজার, মোবাইল অ্যাপ্লিকেশন, এবং ডেস্কটপ অ্যাপ্লিকেশন।
  5. রিয়েল-টাইম ডেটা আপডেট (Real-time Data Updates): SignalR মাধ্যমে সার্ভার থেকে ক্লায়েন্টে দ্রুত ডেটা আপডেট করা যায়। উদাহরণস্বরূপ, একটি চ্যাট অ্যাপ্লিকেশন যেখানে ব্যবহারকারী একটি বার্তা পাঠালে, তা সাথেসাথেই অন্য ব্যবহারকারীদের কাছে পৌঁছে যাবে।

SignalR কিভাবে কাজ করে?

SignalR মূলত Hub কনসেপ্টের উপর ভিত্তি করে কাজ করে। Hub হলো একটি ক্লাস যা সার্ভারের এবং ক্লায়েন্টের মধ্যে যোগাযোগ স্থাপন করে। আপনি SignalR হাবের মাধ্যমে ক্লায়েন্টের সাথে যোগাযোগ করতে পারেন এবং বার্তা পাঠাতে পারেন।

1. SignalR Hub তৈরি

SignalR হাব তৈরি করতে হলে আপনাকে প্রথমে একটি Hub ক্লাস তৈরি করতে হবে, যা রিয়েল-টাইম মেসেজিং লজিক ধারণ করবে। উদাহরণস্বরূপ, একটি চ্যাট হাব তৈরি করা যেতে পারে:

public class ChatHub : Hub
{
    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

এই কোডটি SendMessage নামক একটি মেথড প্রদান করছে যা সমস্ত ক্লায়েন্টে মেসেজ পাঠাবে। Clients.All.SendAsync ব্যবহার করে আপনি সমস্ত সংযুক্ত ক্লায়েন্টকে একযোগে মেসেজ পাঠাতে পারবেন।

2. SignalR Client Side (JavaScript)

SignalR হাবের সাথে ক্লায়েন্ট সাইডে যোগাযোগের জন্য, আপনাকে JavaScript বা TypeScript ব্যবহার করতে হবে। সাধারণত, JavaScript কোডটি SignalR হাবের সাথে সংযুক্ত হওয়ার জন্য ব্যবহৃত হয়। উদাহরণস্বরূপ:

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chatHub")
    .build();

connection.on("ReceiveMessage", function (user, message) {
    console.log(user + ": " + message);
});

connection.start().catch(function (err) {
    return console.error(err.toString());
});

এখানে, connection.on মেথডটি ব্যবহার করে আপনি সার্ভার থেকে আসা মেসেজ গ্রহণ করতে পারেন এবং তা ক্লায়েন্ট সাইডে প্রদর্শন করতে পারেন।


SignalR এর ব্যবহারিক উদাহরণ

SignalR সাধারণত যেসব ক্ষেত্রে ব্যবহৃত হয়, তা হল:

  1. চ্যাট অ্যাপ্লিকেশন: ব্যবহারকারীরা একটি চ্যাট রুমে মেসেজ পাঠালেও, অন্য ব্যবহারকারীরা তা রিয়েল-টাইমে দেখতে পাবেন।
  2. লাইভ ট্র্যাকিং: যেমন ট্রাকিং অ্যাপ্লিকেশন যেখানে রিয়েল-টাইমে যানবাহনের অবস্থান আপডেট হয়।
  3. নিউজ ফিড: সংবাদ বা সোশ্যাল মিডিয়া অ্যাপ্লিকেশনগুলো যেখানে নতুন পোস্ট বা মন্তব্য আপডেট স্বয়ংক্রিয়ভাবে ক্লায়েন্টে আসে।
  4. ফাইনান্সিয়াল ট্র্যাকিং: শেয়ার বাজার বা ক্রিপ্টোকারেন্সি ট্র্যাকিং অ্যাপ্লিকেশন যেখানে রিয়েল-টাইম দাম বা পরিবর্তন ক্লায়েন্টে দেখা যায়।

SignalR এর সুবিধা

  1. এফিসিয়েন্ট রিয়েল-টাইম যোগাযোগ: SignalR এর মাধ্যমে, সার্ভার এবং ক্লায়েন্টের মধ্যে রিয়েল-টাইম যোগাযোগ সরাসরি এবং দ্রুত হয়ে থাকে। এটি ব্রাউজার বা অ্যাপ্লিকেশন অ্যানিমেশন বা রিয়েল-টাইম ডেটা আপডেটের জন্য উপযোগী।
  2. প্ল্যাটফর্ম অ্যান্ড ব্রাউজার স্বাধীনতা: SignalR ওয়েব, ডেস্কটপ, এবং মোবাইল অ্যাপ্লিকেশনসহ বিভিন্ন প্ল্যাটফর্মে সমর্থন দেয়।
  3. স্কেলেবল সলিউশন: এটি বড়ো আকারের অ্যাপ্লিকেশনেও কাজ করে, যেখানে শত শত বা হাজার হাজার ব্যবহারকারী সংযুক্ত থাকতে পারে।
  4. স্বয়ংক্রিয় সংযোগ পুনরুদ্ধার: যদি কোনও ক্লায়েন্ট সংযোগ হারায়, SignalR স্বয়ংক্রিয়ভাবে সংযোগ পুনঃস্থাপন করে।

সারাংশ

SignalR হলো একটি শক্তিশালী লাইব্রেরি যা ASP.NET Core এর মধ্যে রিয়েল-টাইম, দু-মুখী যোগাযোগ সুবিধা প্রদান করে। এটি বিশেষ করে চ্যাট অ্যাপ্লিকেশন, লাইভ ট্র্যাকিং, এবং রিয়েল-টাইম আপডেটের জন্য ব্যবহার করা হয়। SignalR এর মাধ্যমে আপনি ক্লায়েন্ট এবং সার্ভারের মধ্যে দ্রুত এবং অবিচ্ছিন্ন ডেটা সঞ্চালন নিশ্চিত করতে পারেন, যা আপনার অ্যাপ্লিকেশনকে আরও উন্নত এবং ইন্টারেক্টিভ করে তোলে।

common.content_added_by

SignalR ব্যবহার করে রিয়েল-টাইম ডেটা আপডেট

189
189

SignalR হল একটি ASP.NET Core লাইব্রেরি যা ওয়েব অ্যাপ্লিকেশনের জন্য রিয়েল-টাইম কমিউনিকেশন সক্ষম করে। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে দুই-দিক নির্দেশিত যোগাযোগ (bidirectional communication) প্রতিষ্ঠা করতে সাহায্য করে। SignalR এর মাধ্যমে আপনি ওয়েব পৃষ্ঠায় রিয়েল-টাইম ডেটা আপডেট করতে পারেন, যেমন চ্যাট অ্যাপ্লিকেশন, লাইভ নোটিফিকেশন, ড্যাশবোর্ড, ইত্যাদি।

SignalR ব্যবহার করে রিয়েল-টাইম ডেটা আপডেট করার জন্য আপনাকে কিছু নির্দিষ্ট ধাপ অনুসরণ করতে হবে।


SignalR ইনস্টলেশন এবং কনফিগারেশন

ASP.NET Core এ SignalR ব্যবহার করতে প্রথমে কিছু প্যাকেজ ইনস্টল করতে হবে।

SignalR NuGet প্যাকেজ ইনস্টল করা

SignalR ব্যবহার শুরু করার জন্য প্রথমে আপনার প্রজেক্টে SignalR প্যাকেজ ইনস্টল করুন। এটি করতে, NuGet প্যাকেজ ম্যানেজার বা .NET CLI ব্যবহার করতে পারেন।

  • NuGet Package Manager:
    • Microsoft.AspNetCore.SignalR
  • .NET CLI:

    dotnet add package Microsoft.AspNetCore.SignalR
    

SignalR হাব (Hub) তৈরি করা

SignalR এর মাধ্যমে ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগ সম্পন্ন হয় Hub এর মাধ্যমে। হাব হল এমন একটি ক্লাস যা সিগন্যাল সিস্টেমের কেন্দ্রীয় পয়েন্ট হিসেবে কাজ করে। সার্ভার ক্লায়েন্টকে ইভেন্ট বা ডেটা পাঠাতে এবং ক্লায়েন্ট সার্ভারের কাছে ডেটা পাঠাতে হাব ব্যবহার করে।

Hub তৈরি করা

প্রথমে একটি SignalR Hub ক্লাস তৈরি করুন:

using Microsoft.AspNetCore.SignalR;

public class ChatHub : Hub
{
    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

এখানে SendMessage মেথডটি ক্লায়েন্ট থেকে মেসেজ গ্রহণ করে এবং তা সকল ক্লায়েন্টকে প্রেরণ করে ReceiveMessage মেথডের মাধ্যমে।


SignalR হাব কনফিগারেশন

SignalR হাব সার্ভারে কনফিগার করতে হবে। এর জন্য Startup.cs বা Program.cs ফাইলে নিম্নলিখিত কোড যুক্ত করুন।

Startup.cs কনফিগারেশন

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHub<ChatHub>("/chathub");
    });
}

এখানে MapHub<ChatHub>("/chathub") সিগন্যাল হাবকে একটি URL এ ম্যাপ করে, যার মাধ্যমে ক্লায়েন্টরা chathub এ কানেক্ট করতে পারে।


ক্লায়েন্ট সাইডে SignalR ইন্টিগ্রেশন

SignalR হাব সার্ভারে কনফিগার করার পর, এখন ক্লায়েন্ট সাইডে JavaScript দিয়ে SignalR ব্যবহার করা যাবে।

SignalR JavaScript লাইব্রেরি যুক্ত করা

প্রথমে SignalR JavaScript লাইব্রেরি যুক্ত করতে হবে। এটি CDN অথবা NuGet প্যাকেজের মাধ্যমে করা যেতে পারে।

<script src="https://cdn.jsdelivr.net/npm/@microsoft/signalr@5.0.13/dist/browser/signalr.min.js"></script>

SignalR হাবের সাথে কানেক্ট করা

ক্লায়েন্ট সাইডে SignalR হাবের সাথে কানেক্ট করতে নিম্নলিখিত কোড ব্যবহার করুন:

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .build();

connection.on("ReceiveMessage", function(user, message) {
    const msg = user + ": " + message;
    document.getElementById("messagesList").innerHTML += "<li>" + msg + "</li>";
});

connection.start().catch(function(err) {
    return console.error(err.toString());
});

এখানে ReceiveMessage ইভেন্টটি সার্ভার থেকে প্রাপ্ত মেসেজগুলোকে ক্লায়েন্টে রেন্ডার করছে। SignalR হাবের সাথে কানেক্ট করার জন্য start() মেথড ব্যবহার করা হয়েছে।

মেসেজ পাঠানো

ক্লায়েন্ট থেকে সার্ভারে মেসেজ পাঠানোর জন্য, হাবের SendMessage মেথডটি কল করতে হবে:

document.getElementById("sendButton").addEventListener("click", function(event) {
    const user = document.getElementById("userInput").value;
    const message = document.getElementById("messageInput").value;
    connection.invoke("SendMessage", user, message).catch(function(err) {
        return console.error(err.toString());
    });
    event.preventDefault();
});

এখানে SendMessage মেথডের মাধ্যমে ব্যবহারকারীর নাম এবং মেসেজ পাঠানো হচ্ছে।


SignalR এবং রিয়েল-টাইম ডেটা আপডেট

SignalR ব্যবহার করে রিয়েল-টাইম ডেটা আপডেট করার সুবিধা হল যে এটি ব্রাউজার রিফ্রেশ না করেই ডেটা লাইভ আপডেট করতে সক্ষম। উদাহরণস্বরূপ:

  • চ্যাট অ্যাপ্লিকেশন: ব্যবহারকারীরা একে অপরের সঙ্গে রিয়েল-টাইমে মেসেজ শেয়ার করতে পারে।
  • লাইভ ড্যাশবোর্ড: ডেটা আপডেটের সঙ্গে সঙ্গে ড্যাশবোর্ডের গ্রাফ বা চার্ট আপডেট হবে।
  • নোটিফিকেশন সিস্টেম: ব্যবহারকারীদের রিয়েল-টাইম নোটিফিকেশন পাঠানো।

SignalR এর মাধ্যমে আপনি এই ধরনের লাইভ, রিয়েল-টাইম ইন্টারঅ্যাকশন সহজে তৈরি করতে পারেন।


সারাংশ

ASP.NET Core SignalR একটি শক্তিশালী টুল যা রিয়েল-টাইম ওয়েব অ্যাপ্লিকেশন তৈরিতে সহায়তা করে। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে দ্রুত এবং কার্যকরী ডেটা প্রেরণ সক্ষম করে। SignalR ব্যবহার করে আপনি চ্যাট, লাইভ আপডেট, নোটিফিকেশন, ড্যাশবোর্ড ইত্যাদি তৈরি করতে পারেন। SignalR হাব এবং JavaScript ক্লায়েন্ট সাইড ইন্টিগ্রেশন ব্যবহার করে সিস্টেমটি সহজেই তৈরি করা যায়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion